import Loader = Laya.Loader;

class Panel extends Laya.EventDispatcher {

    static atlasMap: Object = {};//引用计数
    /**
     * 是否初始化过
     */
    public initFlag: boolean = false;

    /**
     * 加载列表有两种
     * 1. atlas 模块目录命
     * 2. png jpg 全路径
     */
    public loadList:Array<string>;//预加载列表
    public _releaseList:Array<string>;//外部加载需要释放的图片
    private _loadlist:Array<any>;//加载列表

    public ui:any;//ui 包类型
    public uiClass:any;//ui class实例
    public tParent:any;//显示父级

    public showLoading = true;//是否显示进度条

    constructor() {
        super();
    }

    /**
     * 打开面板
     */
    open=()=>{
        //检测是否初始化过 直接显示
        if(this.initFlag == true){
            this.showUi();
            return;
        }
        //检测加载列表
        if(this.loadList != null){
            this._loadlist = [];
            var loadUrl: string;
            for(var i:number=0;i<this.loadList.length;i++){
                loadUrl = this.loadList[i];
                //检测是图集 还是 单张图片
                if(loadUrl.indexOf(".") == -1){
                    loadUrl = "res/atlas/" + loadUrl + ".atlas";
                    this._loadlist.push({url:loadUrl,type:Loader.ATLAS });
                }else{
                    this._loadlist.push({url:loadUrl,type:Loader.IMAGE });
                    //单张大图需要释放
                    this._releaseList.push(loadUrl);
                }
            }
        }
        //开始 加载
        if(this._loadlist != null && this._loadlist.length > 0){
            //检测是否显示进度条
            if(this.showLoading == true){
                //LoadingBar.instance.appear();
            }
            Laya.loader.load(this._loadlist,Handler.create(this,this.showUi));
        }else{
            this.showUi();
        }
    }

    /**
     * 关闭面板
     */
    close=()=>{
        if(this.ui == null || this.ui.parent == null){
            return;
        }
        //移除 自身 关闭面板 释放 资源
        this.ui.removeSelf();
        this.onClose();
        this.releaseResource();
        // MusicManager.playSound(MusicManager.CLOSE_PANEL);
    }

    //显示ui
    protected showUi=()=>{
        if(this.initFlag == false){
            //移除进度条
            if(this.showLoading == true){
                //LoadingBar.instance.close();
            }
            //初始化ui实例
            if(this.uiClass != null){
                this.ui = new this.uiClass();
            }
            //初始化完成
            this.initFlag = true;
            this.onFirst();
        }
        //已经添加显示
        if(this.ui.parent != null){
            return;
        }
        //锁定纵横比
        this.ui.scale(UIManager.ui_scale,UIManager.ui_scale);
        //添加显示
        if(this.tParent != null){
            this.tParent.addChild(this.ui);
        }else{
            UIManager.uiLayer.addChild(this.ui);
        }
        this.onShow();
        // MusicManager.getInstance().playSound(MusicManager.OPEN_PANEL);
    }

    /**
     * 等待覆盖 初始化
     */
    protected onFirst():void{

    }

    /**
     * 等待覆盖 添加到舞台
     */
    protected onShow():void{

    }

    /**
     * 等待覆盖 从舞台移除
     */
    protected onClose():void{
        
    }

    /**
     * 切换显示 关闭/打开
     */
    public toggle():void{
        if(this.inStage() == true){
            this.close();
        }else{
            this.open();
        }
    }

    /**
     * 检测是否在舞台上
     */
    public inStage():boolean{
        //没初始化 或者父级为空
        if(this.initFlag == false || this.ui == null || this.ui.parent == null){
            return false;
        }
        return true;
    }

    //释放资源
    private releaseResource():void{
        if(this._releaseList == null){
            return;
        }
        for(var i:number=0;i<this._releaseList.length;i++){
            Utils.releaseTexture(this._releaseList[i])
        }
    }
}